// 导入express-session模块，用于处理用户会话
const session = require("express-session");
// 导入Redis存储适配器，用于将会话数据存储到Redis
const { RedisStore } = require("connect-redis");
// 导入已配置的Redis客户端实例
const redisClient = require("./redis");

// 配置并导出会话中间件
module.exports = session({
  // 会话存储配置：使用Redis存储会话数据
  store: new RedisStore({
    client: redisClient, // 指定使用的Redis客户端
    prefix: "express:session:", // 会话数据在Redis中的键前缀，避免键名冲突
    ttl: 24 * 60 * 60, // 会话过期时间（秒），这里设置为24小时
  }),
  secret: process.env.SESSION_SECRET, // 用于签名会话ID的密钥，从环境变量获取
  resave: false, // 即使会话未修改也强制保存，设置为false提高性能
  saveUninitialized: false, // 是否保存未初始化的会话，false可避免存储空会话
  // 会话Cookie配置
  cookie: {
    httpOnly: true, // 限制Cookie只能通过HTTP(S)协议访问，防止客户端脚本读取
    secure: process.env.NODE_ENV === "production", // 生产环境下启用HTTPS传输Cookie
    sameSite: "lax", // 限制跨站请求携带Cookie，增强安全性
    //  Cookie过期时间（毫秒），优先从环境变量获取，默认24小时
    maxAge: parseInt(process.env.SESSION_MAX_AGE) || 24 * 60 * 60 * 1000,
  },
});
